package br.foton.la.agenda.entity;

import java.io.Serializable;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@NamedQueries(value = {
		@NamedQuery(name = Carreta.GET_BY_MODELO, query = "select c from Carreta c where c.modelo = :modelo"),
		@NamedQuery(name = Carreta.GET_BY_FABRICANTE, query = "select c from Carreta c where c.fabricante = :fabricante")})
@Entity
@SequenceGenerator(name="carretaGenerator",sequenceName="CARRETA_SEQ",allocationSize=1)
public class Carreta implements Serializable{
	private static final long serialVersionUID = 1L;
	public static final String GET_BY_MODELO = "Carreta.GET_BY_MODELO";
	public static final String GET_BY_FABRICANTE = "Carreta.GET_BY_FABRICANTE";
	
	@Id
	@GeneratedValue(generator="carretaGenerator",strategy=GenerationType.SEQUENCE)
	private Integer id;
	@Column(nullable = false, length = 30)
	private String modelo;
	@Column(nullable = false, length = 20)
	private String cor;
	@Column(nullable = false, length = 10)
	private String placa;
	@Column(nullable = false, length = 30)
	private String fabricante;
	@Column(name="dt_fabricacao",nullable=false)
	@Temporal(TemporalType.DATE)
	private Date dataFabricacao;
	@OneToOne (mappedBy="carreta", cascade=CascadeType.ALL)
	private Motorista motorista;
	
	public Carreta() {
		// TODO Auto-generated constructor stub
	}
	
	public Carreta(String modelo, String placa, String fabricante){
		setModelo(modelo);
		setPlaca(placa);
		setFabricante(fabricante);
		setDataFabricacao(new Date());
	}

	@Override
	public String toString() {
		return "Carreta [id=" + id + ", modelo=" + modelo + ", cor=" + cor
				+ ", placa=" + placa + ", fabricante=" + fabricante
				+ ", dataFabricacao=" + dataFabricacao + "]";
	}

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getModelo() {
		return modelo;
	}

	public void setModelo(String modelo) {
		this.modelo = modelo;
	}

	public String getCor() {
		return cor;
	}

	public void setCor(String cor) {
		this.cor = cor;
	}

	public String getPlaca() {
		return placa;
	}

	public void setPlaca(String placa) {
		this.placa = placa;
	}
	
	@Basic(fetch=FetchType.LAZY)
	public String getFabricante() {
		return fabricante;
	}

	public void setFabricante(String fabricante) {
		this.fabricante = fabricante;
	}
	
	@Basic(fetch=FetchType.LAZY)
	public Date getDataFabricacao() {
		return dataFabricacao;
	}

	public void setDataFabricacao(Date dataFabricacao) {
		this.dataFabricacao = dataFabricacao;
	}

	public Motorista getMotorista() {
		return motorista;
	}

	public void setMotorista(Motorista motorista) {
		this.motorista = motorista;
	}
	
}
